10 REM COMMODORE FONT EDITOR 20 REM PROGRAMMED BY STEPHEN REED 30 REM 40 REM IF YOU DON'T WANT TO TYPE IN 50 REM THIS PROGRAM, COPIES ARE 60 REM AVAILABLE ON DISK WITH SEVERAL 70 REM CHARACTER FONTS. SEND $12.95 TO: 80 REM 90 REM FONT EDITOR 100 REM 2404 S. MYRTLE AVE. 110 REM SANFORD, FL 32707 120 REM 130 REM 140 REM *************************** 150 REM * INITIALIZE PROGRAM DATA * 160 REM *************************** 170 REM 180 POKE53281,1:POKE53280,7 190 POKE52,48:POKE56,48:CLR:DIMR$(7) 200 FORA=0TO7:READR(A):NEXTA 210 DATA 128,64,32,16,8,4,2,1 220 PRINT"[147]"CHR$(142)CHR$(8)""; 230 CC=1:OC=1 240 PRINT" COMMODORE FONT EDITOR [160]"; 250 PRINT"[144][163][163][163][163][163][163][163][163][163][163][163][163][163][163][163][163][163][163][163][163][163][163][163][163][163][163][163][163][163][163][163][163][163][163][163][163][163][163][163][163]" 260 GOSUB510:REM GET E WINDOW 270 GOSUB740:REM MENU ON SCREEN 280 GOSUB920:REM DISPLAY CHARACTERS 290 GOSUB1070:REM UPDATE SCRN FOR CC 300 IFPEEK(12288)=60THEN430 310 REM 320 REM *************************** 330 REM * DOWNLOAD ROM CHARACTERS * 340 REM *************************** 350 REM 360 PRINT"";O$;"PLEASE WAIT 30 SECONDS" 370 POKE56334,PEEK(56334)AND254 380 POKE1,PEEK(1)AND251 390 FORA=0TO2047 400 POKEA+12288,PEEK(A+53248):NEXT 410 POKE1,PEEK(1)OR4 420 POKE56334,PEEK(56334)OR1:GOSUB1070 430 GOSUB740 440 POKE53272,(PEEK(53272)AND240)+12 450 GOSUB1390:IFA$<"0"ORA$>"9"THEN450 460 A=VAL(A$):IFA=0THENA=10 470 ONAGOSUB1700,1890,2070,2430,2620,2750,2920,3010,3170,3240 480 GOTO 450 490 REM 500 REM ****************************** 510 REM * PUT EDIT WINDOW ON SCREEN * 520 REM ****************************** 530 REM 540 PRINT" [144]"; 550 PRINT" 12345678 " 560 PRINT"  [156][205] [206][144] " 570 PRINT"  [156] [205] [206] [144] " 580 PRINT" 1[156] [146]  [144]1" 590 PRINT" 2[156] [146]  [144]2" 600 PRINT" 3[156] [146]  [144]3" 610 PRINT" 4[156] [146]  [144]4" 620 PRINT" 5[156] [146]  [144]5" 630 PRINT" 6[156] [146]  [144]6" 640 PRINT" 7[156] [146]  [144]7" 650 PRINT" 8[156] [146]  [144]8" 660 PRINT"  [156] [206] [205] [144] " 670 PRINT"  [156][206] [205][144] " 680 PRINT"  12345678 [146]":RETURN 690 REM 700 REM *************************** 710 REM * PUT MAIN MENU ON SCREEM * 720 REM *************************** 730 REM 740 PRINT"*** MENU ***[144]" 750 O$="" 760 PRINT:PRINTO$;"1] SAVE FONT" 770 PRINTO$;"2] LOAD FONT" 780 PRINTO$;"3] EDIT CHARACTER" 790 PRINTO$;"4] MOVE CHARACTERS" 800 PRINTO$;"5] SWAP CHARACTERS" 810 PRINTO$;"6] INVERSE CHARACTERS" 820 PRINTO$;"7] GET ROM CHARACTERS" 830 PRINTO$;"8] DISPLAY DATA VALUES" 840 PRINTO$;"9] DECREMENT DISPLAY" 850 PRINTO$;"0] INCREMENT DISPLAY" 860 PRINT:PRINTO$;" SELECT OPTION? ":RETURN 870 REM 880 REM ****************************** 890 REM * PUT CHARACTER DATA ON LINE * 900 REM ****************************** 910 REM 920 PRINT""; 930 PRINT" "; 940 PRINT"[144]@ABCDEFGHIJKLMNO"; 950 PRINT"PQRSTUVWXYZ[\]^_ !"+CHR$(34)+"#$%&'()*+,-./01234567"; 960 PRINT"89:;<=>?[192][193][194][195][196][197][198][199][200][201][202][203][204][205][206][207][208][209][210][211][212][213][214][215][216][217][218][219][220][221][255][223]" 970 FORA=94TO255 980 POKE1024+18*40+24+A,A 990 POKE55296+18*40+24+A,0 1000 NEXT 1010 PRINTCHR$(146):RETURN 1020 REM 1030 REM ****************************** 1040 REM * PUT CURRENT DATA ON SCREEN * 1050 REM ****************************** 1060 REM 1070 POKE55296+18*40+OC+24,0:OC=CC 1080 POKE55296+18*40+CC+24,2 1090 PRINT"[156]CODE ";RIGHT$(STR$(CC),LEN(STR$(CC))-1); 1100 IFCC<10THENPRINT" " 1110 IFCC<100THENPRINT" " 1120 PRINT"[146]";:FORA=0TO7:P$="" 1130 B=PEEK(12288+A+(CC*8)) 1140 IFB=>128THENZP=1:B=B-128 1150 GOSUB1320 1160 IFB=>64THENZP=1:B=B-64 1170 GOSUB1320 1180 IFB=>32THENZP=1:B=B-32 1190 GOSUB1320 1200 IFB=>16THENZP=1:B=B-16 1210 GOSUB1320 1220 IFB=>8THENZP=1:B=B-8 1230 GOSUB1320 1240 IFB=>4THENZP=1:B=B-4 1250 GOSUB1320 1260 IFB=>2THENZP=1:B=B-2 1270 GOSUB1320 1280 IFB=1THENZP=1 1290 GOSUB1320 1300 PRINT"[144]";P$:NEXTA 1310 RETURN 1320 IFZP=1THENP$=P$+"[209]":ZP=0:RETURN 1330 P$=P$+" ":RETURN 1340 REM 1350 REM *************************** 1360 REM * SCAN KEYBOARD FOR INPUT * 1370 REM *************************** 1380 REM 1390 GETA$:IFA$=""THEN1390 1400 RETURN 1410 REM 1420 REM *************************** 1430 REM * ERASE MENU AREA * 1440 REM *************************** 1450 REM 1460 PRINT""; 1470 FORA=0TO13 1480 PRINTO$;" " 1490 NEXTA:RETURN 1500 REM 1510 REM *************************** 1520 REM * FORMATTED NUMERIC INPUT * 1530 REM *************************** 1540 REM 1550 PRINT"[172][172][172][157][157][157]";:Z=0:B$="" 1560 FORA=1TO3:GOSUB1600:IFZ=1THEN1580 1570 NEXT 1580 W=VAL(B$):IFW>255THENPRINT"[157][157][157]";:GOTO1550 1590 RETURN 1600 GOSUB1390 1610 IFA$=CHR$(13)THENZ=1:RETURN 1620 IFA$<"0"ORA$>"9"THEN1600 1630 B$=B$+A$ 1640 PRINTA$;:RETURN 1650 REM 1660 REM ************************** 1670 REM * SAVE FONT DATA TO DISK * 1680 REM ************************** 1690 REM 1700 GOSUB1430 1710 PRINT""O$" ...SAVE DATA...[144]" 1720 PRINT:PRINT""O$"FILESPEC"; 1730 INPUTN$:IFLEN(N$)>8THEN1700 1740 OPEN 1,8,12,N$+",P,W" 1750 PRINT#1,CHR$(0)+CHR$(48); 1760 FORI=0TO255 1770 PRINT""O$"";I 1780 B$="" 1790 FORJ=0TO7 1800 B$=B$+CHR$(PEEK(12288+J+I*8)):NEXT 1810 PRINT#1,B$; 1820 NEXTI:CLOSE1:GOSUB1430 1830 GOSUB740:RETURN 1840 REM 1850 REM **************************** 1860 REM * LOAD FONT DATA FROM DISK * 1870 REM **************************** 1880 REM 1890 GOSUB1430 1900 PRINT""O$" ...LOAD DATA...[144]" 1910 PRINT:PRINT""O$"FILESPEC"; 1920 INPUTN$:IFLEN(N$)>8THEN1700 1930 OPEN 1,8,12,N$+",P,R" 1940 GET#1,A$,A$ 1950 FORI=0TO255 1960 PRINT""O$"";I 1970 FORJ=0TO7 1980 GET#1,A$:A=0:IFA$<>""THENA=ASC(A$) 1990 POKE12288+J+I*8,A:NEXTJ 2000 NEXTI:CLOSE1:GOSUB1430 2010 GOSUB740:RETURN 2020 REM 2030 REM ************************** 2040 REM * EDIT CHARACTER ROUTINE * 2050 REM ************************** 2060 REM 2070 GOSUB1430 2080 PRINT""O$"[156] EDIT CHARACTER[144]" 2090 PRINT:PRINTO$"CHARACTER # ";:GOSUB1550 2100 CC=W:GOSUB1070 2110 GOSUB1430:PRINT""O$;"[156]EDIT CHARACTER[144]" 2120 PRINT:PRINTO$"[E] ERASE BUFFER" 2130 PRINTO$"[*]/[.] SET PIXEL" 2140 PRINTO$"[SPACE] RESET PIXEL":PRINTO$"[RETURN] FINISHED" 2150 PRINT:PRINT:PRINTO$" CURSOR KEYS MOVE" 2160 PRINTO$" EDITING CURSOR." 2170 X=4:Y=4:G=1:GOSUB2350 2180 GOSUB1390:IFA$="E"THENGOSUB2410:GOTO2180 2190 IFA$=" "THENG=3:GOSUB2350:GOTO2180 2200 IFA$="*"ORA$="."THENG=2:GOSUB2350:GOTO2180 2210 IFA$=CHR$(13)THEN2280 2220 IFA$<>"[145]"ANDA$<>""ANDA$<>"[157]"ANDA$<>""THEN2180 2230 IFA$="[145]"ANDY>1THENG=0:GOSUB2400:Y=Y-1:GOSUB2350:GOTO2180 2240 IFA$=""ANDY<8THENG=0:GOSUB2400:Y=Y+1:GOSUB2350:GOTO2180 2250 IFA$=""ANDX<8THENG=0:GOSUB2400:X=X+1:GOSUB2350:GOTO2180 2260 IFA$="[157]"ANDX>1THENG=0:GOSUB2400:X=X-1:GOSUB2350:GOTO2180 2270 GOTO 2180 2280 FORA=0TO7 2290 GOSUB2320:REM GET BYTE IN B 2300 POKE12288+(CC*8)+A,B:NEXTA 2310 GOSUB1070:GOSUB1430:GOSUB740:RETURN 2320 B=0:FORR=0TO7 2330 U=PEEK(1268+(A*40)+R):IFU=87ORU=81THENB=B+R(R) 2340 NEXTR:RETURN 2350 X$="":Y$="":PRINT"";LEFT$(X$,X);LEFT$(Y$,Y); 2360 IFG=2THENPRINT"[144][209]":G=1:GOSUB2350:RETURN 2370 IFG=3THENPRINT"[144] ":G=1:GOSUB2350:RETURN 2380 K=PEEK(1227+X+Y*40):IFK=81THENPRINT"[215]":RETURN 2390 PRINT"+":RETURN 2400 POKE1227+X+Y*40,K:POKE55499+X+Y*40,0:RETURN 2410 PRINT"";:FORA=1TO8:PRINT" " 2420 NEXTA:G=1:K=32:GOSUB2350:RETURN 2430 GOSUB1430 2440 PRINT""O$"STARTING CHAR "; 2450 GOSUB1550:M1=W 2460 PRINT:PRINTO$"ENDING CHAR ";:GOSUB1550 2470 M2=W 2480 PRINT:PRINTO$"MOVE TO CHAR ";:GOSUB1550 2490 IFM1>M2THEN2430 2500 IFW<=M2 ANDW=>M1 THEN 2430 2510 PRINT:PRINTO$;" ...MOVING...[144]" 2520 FORA=0TO(M2-M1) 2530 FORB=0TO7 2540 POKE12288+B+(A+W)*8,PEEK(12288+B+(A+M1)*8) 2550 NEXTB,A 2560 GOSUB1430:GOSUB740:RETURN 2570 REM 2580 REM **************************** 2590 REM * SWAP CHARACTER DATA SUBR * 2600 REM **************************** 2610 REM 2620 GOSUB1430:PRINT"[144]"O$"STARTING CHAR ";:GOSUB1550:SC=W 2630 PRINT:PRINTO$"ENDING CHAR ";:GOSUB1550:EC=W 2640 PRINT:PRINTO$"SWAP WITH ";:GOSUB1550 2650 FORA=0TO(EC-SC):FORB=0TO7 2660 T=PEEK(12288+B+(A+W)*8) 2670 POKE12288+B+(A+W)*8,PEEK(12288+B+(A+SC)*8) 2680 POKE12288+B+(A+SC)*8,T:NEXTB,A 2690 GOSUB1430:GOSUB740:GOSUB1070:RETURN 2700 REM 2710 REM ************************** 2720 REM * REVERSE CHARACTER DATA * 2730 REM ************************** 2740 REM 2750 GOSUB1430 2760 PRINT"";:IFYT=0THENPRINTO$"[144]REVERSE DATA" 2770 PRINT:PRINTO$"STARTING CHAR ";:GOSUB1550 2780 SC=W 2790 PRINT:PRINT:PRINTO$"ENDING CHAR ";:GOSUB1550 2800 IFW * 3150 REM *************************** 3160 REM 3170 CC=CC-1:IFCC<0THENCC=255 3180 GOSUB1070:RETURN 3190 REM 3200 REM *************************** 3210 REM * INCREMENT CHARACTER --> * 3220 REM *************************** 3230 REM 3240 CC=CC+1:IFCC>255THENCC=1 3250 GOTO 3180